#!/usr/bin/perl

$SYSTEM_VERS 		= "/System/Library/CoreServices/SystemVersion.plist";

$ARGV[0] =~ s/ /\\ /g;

if (CheckVersion("$SYSTEM_VERS", "10.4", "ProductVersion", "<"))
{
	$EXIT_VALUE = ((1 << 6) | (1 << 5) | 16);
	exit($EXIT_VALUE);
}

sub CheckVersion
{
	my $path            = $_[0];
	my $version         = $_[1];
	my $keyName         = $_[2];
	my $operator        = $_[3];
	
	if (! -e $path)
	{
		return 0;
	}
	
	if (!$operator)
	{
		$operator = "==";
	}
	
	my $oldSeperator = $/;
	$/ = \0;
	
	open(PLIST, "$path") || do
	{
		return 0;
	};
	
	$plistData = <PLIST>;
	$plistData =~ /<dict>(.*?)<\/dict>/gis;
	
	@items = split(/<key>/, $plistData);
	
	shift @items;
	foreach $item (@items)
	{
		$item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
		$versiondata{ $1 } = $2;
	}
	
	close(PLIST);
	
	$/ = $oldSeperator;
	
	@theVersionArray = split(/\./, $versiondata{$keyName});
	for ($i = 0; $i < 3; $i++)
	{
		if (!$theVersionArray[$i])
		{
			$theVersionArray[$i] = '0';
		}
	}
	
	@versionArray = split(/\./, $version);
	
	my $actualVersion;
	
	for ($i = 0; $i < 3; $i++)
	{
		if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2))
		{
			$actualVersion = $theVersionArray[$i];
			$version = $versionArray[$i];
			
			last;
		}
	}
	
	my $expression = '$actualVersion ' . $operator . ' $version';
	if (eval($expression))
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
